package com.zwx.aray.leetcode_6;

/**
 * 只出现一次的数字
 * 给定一个非空整数数组，除了某个元素只出现一次以外，
 * 其余每个元素均出现两次。找出那个只出现了一次的元素。
 *
 * @author 文希
 * @create 2019-06-28 0:00
 */
public class SingleNumber {

    /**
     * 思路：
     * 我们可以考虑 异或运算 ，它是满足交换律和结合的，也就是说 a^b^c = a^c^b，
     * 这样当我们遍历数组，顺次进行异或运算，那么最终的结果就是唯一的不重复数字。
     * <p>
     * 如[4,1,2,1,2]，4^1^2^1^2 = 1^1^2^2^4 = 0^0^4=4
     *
     * @param nums
     * @return
     */
    private static int singleNumber(int[] nums) {
        int result = 0;
        for (int i = 0; i < nums.length; i++) {
            result = nums[i] ^ result;
        }
        return result;
    }
}
